home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 145
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin
/
games
/
spassion
/
source.lzh
/
SOURCE
/
SOUND.C
< prev
next >
Wrap
Text File
|
2000-03-31
|
5KB
|
199 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include "SPASSION.H"
#include "SOUND.H"
static void *music_ptr[MAX_MUSIC]; /* 読み込んだ .ZMD データへのポインタ */
static int music_size[MAX_MUSIC]; /* ↑ のサイズ */
static void *se_ptr[MAX_SE]; /* 読み込んだ .PCM データへのポインタ */
static int se_size[MAX_SE]; /* ↑ のサイズ */
/*うまくいかなかったので今回は使わない*/
#if 0
static void *zpd_ptr[MAX_SE]; /* 読み込んだ .ZPD データへのポインタ */
static int zpd_size[MAX_SE]; /* ↑ のサイズ */
#endif
static short se_no = 0; /* 鳴らす効果音の番号 */
/*short *seq_tbl;*/ /* Z-muSiC内部ワークの開始番地 */
/*
サウンド初期化
*/
void InitSound( void )
{
FILE *fp, *fp2;
int i,data_no;
char str1[1024];
void SetZPD( char *fname, short num );
void ChangeZPD( short num );
void game_end();
/* 常駐チェック */
if( ZmKeepCheck () ){ /* ZMUSIC が常駐しているか調べる */
static char e[256];
error_level = ERROR_MUSIC;
error_message = e;
sprintf(e, "Zmusicを常駐してください。\n");
game_end(); /* 返ってこない */
}
/* seq_tbl = z_get_wk_tbl();*/ /* なんに使うか分からないので消しとく */
ZmInit();
for (i = 0; i < MAX_SE; i++)
se_ptr[i] = NULL;
for (i = 0; i < MAX_MUSIC; i++)
music_ptr[i] = NULL;
/* SOUND.CNF 読み込み */
if ((fp = fopen ("SOUND.CNF", "r")) == NULL) {
static char e[256];
error_level = ERROR_MUSIC;
error_message = e;
sprintf(e, "SOUND.CNF が読み込めません\n");
game_end(); /* 返ってこない */
}
while (fscanf (fp, "%s", str1) != EOF) {
if (ferror (fp) || feof (fp))
break;
if (!strcmpi (str1, "SE")) {
fscanf (fp, "%d %s", &data_no, &str1);
if ((fp2 = fopen (str1, "rb")) == NULL) {
static char e[256];
error_level = ERROR_MUSIC;
error_message = e;
sprintf (e, "ファイル %s が読み込めません\n", str1);
game_end(); /* 返ってこない */
}
se_size[data_no] = filelength (fileno (fp2));
if ((se_ptr[data_no] = malloc (se_size[data_no])) == NULL) {
static char e[256];
error_message = e;
sprintf (e, "効果音用メモリが足りません\n");
error_level = ERROR_FILE;
game_end(); /* 返ってこない */
}
fread(se_ptr[data_no], se_size[data_no], 1, fp2);
fclose(fp2);
fgets(str1, 1024, fp); /* 以下読み捨てる */
continue;
}
if (!strcmpi (str1, "MUSIC")) {
fscanf (fp, "%d %s", &data_no, &str1);
if ((fp2 = fopen (str1, "rb")) == NULL) {
static char e[256];
error_level = ERROR_MUSIC;
error_message = e;
sprintf (e, "ファイル %s が読み込めません\n", str1);
game_end(); /* 返ってこない */
}
music_size[data_no] = filelength (fileno (fp2));
if ((music_ptr[data_no] = malloc (music_size[data_no])) == NULL) {
static char e[256];
error_level = ERROR_FILE;
error_message = e;
sprintf (e, "音楽用メモリが足りません\n");
game_end(); /* 返ってこない */
}
fread (music_ptr[data_no], music_size[data_no], 1, fp2);
fclose (fp2);
fgets (str1, 1024, fp); /* 以下読み捨てる */
continue;
}
fgets (str1, 1024, fp); /* 以下読み捨てる */
if (ferror (fp) || feof (fp))
break;
}
fclose (fp);
/*うまくいかなかったので今回は使わない*/
#if 0
SetZPD( "MUSIC/STG200MK.ZPD", 0 );
SetZPD( "MUSIC/SLW1.ZPD", 1 );
ChangeZPD( 0 );
#endif
}
/* 音楽を鳴らす */
void PlayBGM( int no )
{
Stop(); /* 演奏を停止する */
if( music_ptr[no] )
ZmPlay(music_ptr[no], music_size[no]);
}
/* 効果音をセットする(けど鳴らさない) */
void SetSE( short no )
{
/* 優先順位を判定 */
if(no > se_no)
se_no = no;
}
/* 効果音を鳴らす */
void PlaySE( void )
{
if( pcm_mode ){
if(se_no){
if(se_ptr[se_no]){
ZmAdpcmSE(se_ptr[se_no], se_size[se_no], 4 * 256 + 3, se_no);
}
se_no = 0;
}
}
}
/*うまくいかなかったので今回は使わない*/
#if 0
void SetZPD( char *fname, short num )
{
FILE *fp;
void game_end();
if((fp = fopen (fname, "rb")) == NULL) {
static char e[256];
error_message = e;
sprintf(e, "%s が読み込めません\n",fname);
game_end(); /* 返ってこない */
}
zpd_size[num] = filelength(fileno (fp));
if ((zpd_ptr[num] = malloc(zpd_size[num])) == NULL) {
static char e[256];
error_message = e;
sprintf (e, "ZPD用メモリが足りません\n");
game_end(); /* 返ってこない */
}
fread(zpd_ptr[num], zpd_size[num], 1, fp);
fclose(fp);
}
void ChangeZPD( short num )
{
void set_zpd( void * );
set_zpd( zpd_ptr[num]+8 );
}
#endif
/* 特に使わなくてもいいようなので */
#if 0
/* 終了時に1回だけ呼ばれる */
void SoundTini0 (void)
{
int i;
FadeOut(64);
for(i = 0; i < MAX_SE; i++) {
if (se_ptr[i] != NULL)
free(se_ptr[i]);
}
for(i = 0; i < MAX_MUSIC; i++) {
if(music_ptr[i] != NULL)
free(music_ptr[i]);
}
}
#endif